草庐IT

Python float - str - 浮点怪异

全部标签

将32位浮点音频转换为16位

(注:只改变量化位数,并不改变采样率和声道数等信息) 弄了一个下午加一个早上,终于算是弄完了,效果非常不错,音质无损失,之前一直用ffmpeg做重采样处理,但是一直是各种艰辛,各种奔溃,很无语,最后想了一下,从源头开始,自己想办法吧数据转换一下,搜了一下雷神的,他写了PCM从16位转到8位的,没有32位到16位的,所以只能自己摸索了,总结一下,核心代码:注释的地方是探索的过程,实际不需要 intpcm32_to_pcm16(constchar*filename){ FILE*fp= fopen(filename,"rb");FILE*fp1=fopen("output_16.pcm","wb"

Python str View

我有一个长约1GB的巨大str:>>>len(L)1073741824我需要从特定索引中取出许多字符串,直到字符串结束。在C中我会这样做:char*L=...;char*p1=L+start1;char*p2=L+start2;...但在Python中,对字符串进行切片会使用更多内存创建一个新的str实例:>>>id(L)140613333131280>>>p1=L[10:]>>>id(p1)140612259385360为了节省内存,我如何创建一个实际上是指向原始L的指针的类似str的对象?Edit:我们在Python2和Python3中有buffer和memoryview,但mem

Python str View

我有一个长约1GB的巨大str:>>>len(L)1073741824我需要从特定索引中取出许多字符串,直到字符串结束。在C中我会这样做:char*L=...;char*p1=L+start1;char*p2=L+start2;...但在Python中,对字符串进行切片会使用更多内存创建一个新的str实例:>>>id(L)140613333131280>>>p1=L[10:]>>>id(p1)140612259385360为了节省内存,我如何创建一个实际上是指向原始L的指针的类似str的对象?Edit:我们在Python2和Python3中有buffer和memoryview,但mem

c++ - 使用可变数量的浮点参数

我正在尝试为我的structPolynomial实现一个灵活的构造函数:structPolynomial{std::vectorcoefficients;size_tdegree;};多项式的次数是可变的。我想要的是有一个像这样的构造函数Polynomial(float..._coefficients);我试过可变参数模板:templatePolynomial(Args...args);但float是非类型,所以我已经完成了:templatePolynomial(Args...args);但这允许我的系数是任何东西,而不是我想要的。我知道我可以使用:Polynomial(size_t_

c++ - 使用可变数量的浮点参数

我正在尝试为我的structPolynomial实现一个灵活的构造函数:structPolynomial{std::vectorcoefficients;size_tdegree;};多项式的次数是可变的。我想要的是有一个像这样的构造函数Polynomial(float..._coefficients);我试过可变参数模板:templatePolynomial(Args...args);但float是非类型,所以我已经完成了:templatePolynomial(Args...args);但这允许我的系数是任何东西,而不是我想要的。我知道我可以使用:Polynomial(size_t_

c++ - 如何定义自定义浮点类型 numpy dtypes (C-API)

我有一个自定义float据类型,它使用两个64位float模拟128位float(QDlibrary中的双double类dd_real)。从C++我想将一个ndarray导出到python。我已经知道如何为64位float执行此操作,但对于double我不知何故需要指定我自己的自定义dtype。该怎么做?注意:numpy有自己的128位float(np.float128),不幸的是,这映射到C/C++中的longdouble,这只是存储在128位中的80位float(在我所有的平台上).事实上,应该能够以与numpy导出np.float128完全相同的方式执行此操作(我只是不知道这是如

c++ - 如何定义自定义浮点类型 numpy dtypes (C-API)

我有一个自定义float据类型,它使用两个64位float模拟128位float(QDlibrary中的双double类dd_real)。从C++我想将一个ndarray导出到python。我已经知道如何为64位float执行此操作,但对于double我不知何故需要指定我自己的自定义dtype。该怎么做?注意:numpy有自己的128位float(np.float128),不幸的是,这映射到C/C++中的longdouble,这只是存储在128位中的80位float(在我所有的平台上).事实上,应该能够以与numpy导出np.float128完全相同的方式执行此操作(我只是不知道这是如

c++ - 是否有任何具有非 IEEE C/C++ 浮点格式的现代平台?

我正在写一个电子游戏,HummandStrumm,它的游戏引擎中需要一个网络组件。我可以轻松处理字节序的差异,但在尝试处理可能的float内存格式时遇到了困难。我知道现代计算机都有标准的整数格式,但我听说它们可能并不都使用IEEE浮点整数标准。这是真的吗?虽然我当然可以将其作为字符串输出到每个数据包中,但无论平台如何,我仍然必须转换为每个客户端的“众所周知的格式”。标准的printf()和atod()是不够的。请注意,因为这个游戏是一个免费/开源软件程序,可以在GNU/Linux、*BSD和MicrosoftWindows上运行,所以我不能使用任何专有解决方案,也不能使用任何单一平台解

c++ - 是否有任何具有非 IEEE C/C++ 浮点格式的现代平台?

我正在写一个电子游戏,HummandStrumm,它的游戏引擎中需要一个网络组件。我可以轻松处理字节序的差异,但在尝试处理可能的float内存格式时遇到了困难。我知道现代计算机都有标准的整数格式,但我听说它们可能并不都使用IEEE浮点整数标准。这是真的吗?虽然我当然可以将其作为字符串输出到每个数据包中,但无论平台如何,我仍然必须转换为每个客户端的“众所周知的格式”。标准的printf()和atod()是不够的。请注意,因为这个游戏是一个免费/开源软件程序,可以在GNU/Linux、*BSD和MicrosoftWindows上运行,所以我不能使用任何专有解决方案,也不能使用任何单一平台解

c++ - 使用运行平均值保持浮点精度

我需要为任意数量的数据点(超过1亿个)计算16位运算的均方误差。我决定采用运行平均值,这样我就不必担心添加大量平方误差会导致溢出。在1亿个样本中,我遇到了浮点精度问题(结果不准确),所以我改为加倍。这是我的代码intiDifference=getIdeal()-getValue();m_iCycles++;//calculatetherunningMSEas//http://en.wikipedia.org/wiki/Moving_average//MSE(i+1)=MSE(i)+(E^2-MSE(i))/(i+1)m_dMSE=m_dMSE+((pow((double)iDiffer